%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Definici�n del tipo de documento.                                           %
% Posibles tipos de papel: a4paper, letterpaper, legalpapper                  %
% Posibles tama�os de letra: 10pt, 11pt, 12pt                                 %
% Posibles clases de documentos: article, report, book, slides                %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\documentclass[a4paper,10pt]{article}


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Los paquetes permiten ampliar las capacidades de LaTeX.                     %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% Paquete para inclusi�n de gr�ficos.
\usepackage{graphicx}

% Paquete para definir la codificaci�n del conjunto de caracteres usado
% (latin1 es ISO 8859-1).
\usepackage[latin1]{inputenc}

% Paquete para definir el idioma usado.
\usepackage[spanish]{babel}


% T�tulo principal del documento.
\title{		\textbf{Trabajo pr\'actico cero: \\ Infraestructura b\'asica \\[3ex]}}

% Informaci�n sobre los autores.
\author	{ 	Badano Juan Ignacio, \textit{Padr\'on Nro. 90.241}                      \\
            \texttt{ j\_badano@hotmail.com }                                            \\
            Liva Mar\'ia Eugenia, \textit{Padr\'on Nro. 86.123}                     	\\
            \texttt{ m.eugenia@liva.net.ar }                                            \\
            Retyk Federico, \textit{Padr\'on Nro. 90.597}                     		\\
            \texttt{ fede.retyk@gmail.com }                                             \\[3ex]
            \normalsize{Grupo Nro. X - 1er. Cuatrimestre de 2011}                       \\
            \normalsize{66.20 Organizaci\'on de Computadoras}                           \\
            \normalsize{Facultad de Ingenier\'ia, Universidad de Buenos Aires}          \\
       }

\date{Jueves 31 de marzo de 2011}

\begin{document}

% Inserta el t�tulo.
\maketitle

% Quita el n�mero en la primer p�gina.
\thispagestyle{empty}

% Resumen
\begin{abstract}
El presente informe corresponde al trab\'ajo pr\'actico inical para la asignatura \textit{66.20 Organizaci\'on de Computadoras}. Contiene descripci\'ones de cada uno de los pasos que se llevaron a cabo para lograr los resultados esperados y una breve presentaci\'on de los mismos.
\end{abstract}

\newpage

\tableofcontents

\newpage

\section{Introducci\'on}

El trabajo pr\'actico tiene por objetivo principal la utilizaci\'on de un simulador de la arquitectura \textit{MIPS}, que fue elegida por la asignatura \textit{66.20 Organizaci\'on de Computadoras} para estudiar en profundidad los temas que abarca la materia. Se busc\'o compilar un programa en aquella arquitectura. Para ello se desarroll\'o una implementaci\'on de la funci\'on \textit{diff}, compil\'andola luego en la susodicha arquitectura, en la cual deb\'ian incorporarse ciertas opci\'ones extra como se muestra a continuaci\'on. 

\begin{itemize}
 \item -v, --version      Imprimir la version y terminar el programa.
 \item -h, --help         Imprimir esta informaci\'on y terminar el programa.
 \item -o, --output       Pecisar el archivo de salida.
 \item -m, --max          Mostrar s\'olo las primeras m diferencias.
\end{itemize}


Adem\'as fue necesario formular el informe como un documento \TeX{} / \LaTeX{}, de forma tal de comenzar a familiarizarnos con ese sistema de composici\'on de textos.


\section{Desarrollo}

Para cumplir con el objetivo del trabajo, el primer paso fue implementar la funci\'on \textit{diff} seg\'un se especificaba en el enunciado. A continuaci\'on fue necesario crear un tunel mediante \textit{ssh} entre el S.O. host (es decir el sistema linux) y el emulador o sistema guest, que simulaba una arquitectura \textit{MIPS 32}. A partir de all\'i pudimos importar desde el S.O. host, tanto el c\'odigo de nuestra implementaci\'on, para poder compilarlo en el S.O. guest, como los archivos de prueba suministrados por la c\'atedra. \'Esto se hizo mediante el compilador \textit{gcc}, provisto por el emulador.

\newpage

\section{Dise\~{n}o e implementaci\'on}

Adjunto se puede encontrar el c\'odigo de dicha implementaci\'on, que fue escrito en el lenguaje C. Al buscarse una respuesta del programa id\'entica a la especificada en los arhcivos de prueba, proporcionados por los docentes, fue necesario proporcionarle al programa la opci\'on de impimir 'all line' en lugar de las diferencias puntuales, en el caso de que una linea entera fuera totalmente distinta entre los archivos de entrada. Adem\'as se requirio investigar acerca de la biblioteca \textit{getopt} para robustecer la caputra de opci\'ones y par\'ametros del programa.

\subsection{Conexion de los sistemas guest y host mediante un tunel ssh}

Para lograr intercambiar archivos entre el sistema operativo host y el emulador de la arquitectura \textit{MIPS} fue necesaria la implementaci\'on de un tunel ssh. Con ayuda del material suministrado por los docentes fue posible llevarlo a cabo. Para esto es necesario ejecutar los siguientes comandos.
\\
Primero se le asigna un n\'umero a la direcci\'on que usaremos para el sistema host (tal vez sea necesario anteponer el comando 'sudo').

\begin{center}
\texttt{ hostOS\$ ifconfig lo:0 172.20.0.1 }
\end{center}

Luego debemos iniciar la comunicaci\'on desde el \textit{GXEmul}, es decir, ingresar en este entorno el siguiente comando.

\begin{center}
\texttt{ guestOS\$ ssh -R 2222:127.0.0.1:22 USER@172.20.0.1 }
\end{center}

As\'i adem\'as estamos definiendo el n\'umero y puerto para la comunicacion desde el guest. En esta instancia es necesario ingresar la contrase\~{n}a del usuario de nuestro host. Luego terminamos de enlazar los sistemas de la siguiente manera.

\begin{center}
\texttt{ hostOS\$ ssh -p 2222 root@127.0.0.1 }
\end{center}

Despu\'es de ingresar la contrase\~{n}a del guest, 'orga6620', el tunel queda armado. Luego para enviar archivos de un sistema al otro, puede hacerse desde la consola. Por ejemplo, para enviar el codigo fuente del programa desde el host hacia el guest, debimos ejecutar el siguiente comando.

\begin{center}
\texttt{ hostOS\$ scp -P 2222 codigo\_fuente.c root@127.0.0.1:/root/carpeta }
\end{center}

A su vez, luego de compilar el programa, se necesitaron los archivos de prueba que deb\'ia satisfacer la ejecuci\'on del programa, los cuales se pudieron enviar de la misma manera.

\subsection{Comandos necesarios para la compilaci\'on en \textit{GXEmul}}

Para compilar el programa en el S.O. guest, una vez copiado el c\'odigo a trav\'es del tunel, es necesario ejecutar el siguiente comando en el shell correspondiente.

\begin{center}
\texttt{ \$ gcc -Wall -o programa tp0.c }
\end{center}

\newpage

\section{Conclusiones}

A continuaci\'on presentamos una corrida de prueba de la implementaci\'on, compilada y ejecutada desde el sistema 'guest'.

% Tenemos que incluir una imagen de la ejecucion cuando hallamos terminado, en formato EPS (Encapsulated Postscript).
\begin{figure}[!htp]
\begin{center}
\includegraphics[width=1\textwidth]{screen.eps}
\end{center}
\caption{Ejemplo de ejecuci\'on del programa $-$ Se ajusta perfectamente a lo requerido.} \label{fig001}
\end{figure}

Puede verse que la soluci\'on responde correctamente a los ejemplos suministrados por los docentes, tanto en sus funcionalidades opcionales como en la principal, es decir, la ejecuci\'on imprime en pantalla lo que se ped\'ia en las pruebas de la c\'atedra.



% Citas bibliogr�ficas.
\begin{thebibliography}{99}

\bibitem{HEN00} J. L. Hennessy and D. A. Patterson, ``Computer Architecture. A Quantitative
Approach,'' 3ra Edici\'on, Morgan Kaufmann Publishers, 2000.

\end{thebibliography}

\end{document}